package com.youle.common.spring;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/** 
 * 类描述：检测内存使用情况<br>
 * 创建人：邓强   <br>
 * 创建时间：2017年8月3日 上午10:21:27    <br> 
 * 修改人：  <br>
 * 修改时间：2017年8月3日 上午10:21:27   <br>  
 * 修改备注：     <br>
 * @version   V1.0      
 */
@Component("monitorMemoryTak")
public class Memory {
	Logger logger = LoggerFactory.getLogger(getClass());
	public void printMemory(){
		double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024); 
		double max = (Runtime.getRuntime().maxMemory()) / (1024.0 * 1024); 
		double free = (Runtime.getRuntime().freeMemory()) / (1024.0 * 1024); 
		//Java 虚拟机试图使用的最大内存量(当前JVM的最大可用内存)
		logger.info("当前JVM的最大可用内存:{} MB",max); 
		//Java 虚拟机中的内存总量(当前JVM占用的内存总数) totalMemory()
		logger.info("当前JVM占用的内存总数:{}MB",total); 
		//Java 虚拟机中的空闲内存量(当前JVM空闲内存) freeMemory()
		logger.info("当前JVM空闲内存:{}MB",free); 
		//因为JVM只有在需要内存时才占用物理内存使用，所以freeMemory()的值一般情况下都很小，而JVM实际可用内存并不等于freeMemory()，而应该等于 maxMemory() - totalMemory() + freeMemory()。
		logger.info("JVM实际可用内存:{}MB",max - total + free); 
	}
}
